home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / misc_pto / mwpetz07 / environ.c < prev    next >
C/C++ Source or Header  |  1991-06-02  |  4KB  |  136 lines

  1. /* ENVIRON.C -- Environment List Box */
  2.  
  3. #ifdef MEWEL
  4. #include <window.h>
  5. #undef NULL
  6. #define NULL 0
  7. #else
  8. #include <windows.h>
  9. #endif
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #define  MAXENV  256
  13.  
  14. long FAR PASCAL WndProc (HWND, unsigned, WORD, LONG) ;
  15.  
  16. int PASCAL WinMain (hInstance, hPrevInstance, lpszCmdLine, nCmdShow)
  17.      HANDLE   hInstance, hPrevInstance ;
  18.      LPSTR    lpszCmdLine ;
  19.      int      nCmdShow ;
  20.      {
  21.      static   char szAppName [] = "Environ" ;
  22.      HWND     hWnd ;
  23.      MSG      msg ;
  24.      WNDCLASS wndclass ;
  25.  
  26.      if (!hPrevInstance) 
  27.           {
  28.           wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
  29.           wndclass.lpfnWndProc   = WndProc ;
  30.           wndclass.cbClsExtra    = 0 ;
  31.           wndclass.cbWndExtra    = 0 ;
  32.           wndclass.hInstance     = hInstance ;
  33.           wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
  34.           wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  35.           wndclass.hbrBackground = COLOR_WINDOW + 1 ;
  36.           wndclass.lpszMenuName  = NULL ;
  37.           wndclass.lpszClassName = szAppName ;
  38.  
  39.           if (!RegisterClass (&wndclass))
  40.                return FALSE ;
  41.           }
  42.  
  43.      hWnd = CreateWindow (szAppName, "Environment List Box",
  44.                          WS_OVERLAPPEDWINDOW,
  45.                          CW_USEDEFAULT, 0,
  46.                          CW_USEDEFAULT, 0,
  47.                          NULL, NULL, hInstance, NULL) ;
  48.  
  49.      ShowWindow (hWnd, nCmdShow) ;
  50.      UpdateWindow (hWnd) ;
  51.  
  52.      while (GetMessage (&msg, NULL, 0, 0))
  53.           {
  54.           TranslateMessage (&msg) ;
  55.           DispatchMessage (&msg) ;
  56.           }
  57.      return msg.wParam ;
  58.      }
  59.  
  60. long FAR PASCAL WndProc (hWnd, iMessage, wParam, lParam)
  61.      HWND        hWnd ;
  62.      unsigned    iMessage ;
  63.      WORD        wParam ;
  64.      LONG        lParam ;
  65.      {
  66.      static HWND hWndList, hWndText ;
  67.      char        szBuffer [MAXENV + 1] ;
  68.      HDC         hDC ;
  69.      TEXTMETRIC  tm ;
  70.      WORD        n ;
  71.  
  72.      switch (iMessage)
  73.           {
  74.           case WM_CREATE:
  75.                hDC = GetDC (hWnd) ;
  76.                GetTextMetrics (hDC, &tm) ;
  77.                ReleaseDC (hWnd, hDC) ;
  78.  
  79.                hWndList = CreateWindow ("listbox", NULL,
  80.                               WS_CHILD | WS_VISIBLE | LBS_STANDARD,
  81.                               tm.tmAveCharWidth, tm.tmHeight * 3,
  82.                               tm.tmAveCharWidth * 16 +
  83.                                    GetSystemMetrics (SM_CXVSCROLL),
  84.                               tm.tmHeight * 5,
  85.                               hWnd, 1,
  86.                               GetWindowWord (hWnd, GWW_HINSTANCE), NULL) ;
  87.  
  88.                hWndText = CreateWindow ("static", NULL,
  89.                               WS_CHILD | WS_VISIBLE | SS_LEFT,
  90.                               tm.tmAveCharWidth,          tm.tmHeight,
  91.                               tm.tmAveCharWidth * MAXENV, tm.tmHeight,
  92.                               hWnd, 2,
  93.                               GetWindowWord (hWnd, GWW_HINSTANCE), NULL) ;
  94.  
  95.                for (n = 0 ; environ[n] ; n++)
  96.                     {
  97.                     if (strlen (environ [n]) > MAXENV)
  98.                          continue ;
  99.                     *strchr (strcpy (szBuffer, environ [n]), '=') = '\0' ;
  100.                     SendMessage (hWndList, LB_ADDSTRING, 0, (LONG) szBuffer) ;
  101.                     }
  102.                break ;
  103.  
  104.           case WM_SETFOCUS:
  105.                SetFocus (hWndList) ;
  106.                break ;
  107.  
  108.           case WM_COMMAND:
  109.  
  110.                if (wParam == 1 && HIWORD (lParam) == LBN_SELCHANGE)
  111.                     {
  112.                     n = (WORD) SendMessage (hWndList, LB_GETCURSEL, 0, 0L) ;
  113.                     n = (WORD) SendMessage (hWndList, LB_GETTEXT, n,
  114.                                              (LONG) szBuffer) ;
  115.  
  116.                     strcpy (szBuffer + n + 1, getenv (szBuffer)) ;
  117.                     *(szBuffer + n) = '=' ;
  118.  
  119.                     SetWindowText (hWndText, szBuffer) ;
  120.                     }
  121.                break ;
  122.  
  123.           case WM_DESTROY:
  124.                PostQuitMessage (0) ;
  125.                break ;
  126.  
  127.           default:
  128.                return DefWindowProc (hWnd, iMessage, wParam, lParam) ;
  129.           }
  130.      return 0L ;
  131.      }
  132.  
  133. #ifdef MEWEL
  134. MEWELmain(0)
  135. #endif
  136.